package duiLei;

public class Main {
    /**
     * 队列
     */
    static final  int N=10;
    private int Q[];
    private int front,rear,count;
    public Main(){//(1)构造个队列初始化他们仨
        Q=new int[N];
        front=rear=count=0;
    }
    public boolean isEmpsy(){//（2）判断队列为空
     if (count==0){
         return true;
     }  else return false;
    }
    public boolean isFull(){//(3)判断队列是否为满
        if (count==N)
            return true;
        else return false;
    }
    public boolean In(int X){//(4)进队列
        if (isFull()){//进队列需要先判断队列是否为空
            return false;
        }

        Q[rear]=X;//确实为空则向队wei插入一条数据】
        rear++;
        count=count+1;
        if (rear==N){
            rear=0;
        }
        return true;
    }
    public  Integer Out(){//(5)出队列
        if (isEmpsy())
            return null;
        int X=Q[front];
        front=front+1;
        count=count-1;
        if (front==N)
            front=0;
        return X;
    }
    //初始化队列
    /*队列规则：排头或者排尾长度超过元数个数 会转回第一位 类似于一个圈圈：front输出，向后跑，rear则跟着向前跑*/
    //分配N个元素的数组Q
    //数组，front排头（）头部第一个元素的位置，rear排尾（）队里末尾元素的后面位置，count记录当前队列里有所少个元素
    //#当front与rear相等时代表数组里没有内容or队列满 一般count都等于0 （只要相等不管count是都等于0 ）
    //# ↑因为元素个数count大于N时rear会回到第一个位置  此时count=N+1 rear=0 front=0
    //（2）判断队列为空  count==0 返回true  否则false
    //（3）判断队列满  count==N 返回true  否则false

    //(4)进队列(x)
    //1.（判断队列是不是满 ）如果满返回false
    //2.Q[rear]=x;接着队尾排
    //3.rear=rear+1,count=count+1
    //4.如果rear==N,则rear=0;

    //（5）出队列（x）
    //1.判断队列是不是空（如果队列为空返回null对象）
    //2.x=Q[front] 把队列头先给取了
    //3.front=front+1,count=count-1;
    //4.front==N,则 front=0;

    public static void main(String[] args) {


    }
}
